//index.js
import Dialog from '@vant/weapp/dialog/dialog';
import Toast from '@vant/weapp/toast/toast';
import Util from "../../utils/util"
import Ajax from "../../utils/ajax"
import Api from "../../utils/api"
//获取应用实例
const app = getApp()

Page({
  data: {
    latitude: 39.909,
    longitude: 116.39742,
    markers: [], // 标记点
    isLocation: false,  //是否定位成功
    time: '',
    address:'',
    isCuntBtn: 0, //打卡点击次数
    signNumber: -1,  // 当日打卡次数  初始状态未查询 -1
    show: false, // 打卡进度弹框是否显示
    notice:'', // 通知公告
    authorizeShow: false // 登录授权确认弹框
  },
  onLoad () {
    app.sysReadyCallback = res => {
      this.setData({
        notice: res,
      })
    }
    // 定位
    this.getAddress()
  },

  // 授权弹框回传
  authorizeEvent(){
    // 授权成功，打卡
    this.signClick()
  },

  // 查询用户今日打卡情况 并打卡
  getUserSign(n){
    let openid = app.globalData.openid
    Ajax.get(Api.wx.getSign,{openid: openid}).then(res=>{
      this.setData({
        signNumber: res,
      })
      app.globalData.signNumber = res
      this.signClick(n)
    })
  },

  // 用户点击打卡按钮
  signClick(n=1){
    if(Util.isEmpty(app.globalData.userInfo)){
      //授权获取用户信息弹框 打开
      this.setData({
        authorizeShow: true
      })
      return 
    }
    if(this.data.isLocation){
      if(this.data.signNumber == -1){
        // 查询后再打卡
        this.getUserSign(n)
      }else if( this.data.signNumber < 3){
        // 如果查询过打卡数就直接打卡
        if(n==2){
          // 图文卡
          wx.navigateTo({
            url: '../singImg/singImg'
          })
        }else{
          // 普通卡
          this.loginSign()
        }
      }else{
        Toast('超过今日打卡上限！');
      }
    }else{
      Dialog.alert({
        message: '请授权小程序获取定位权限',
      }).then(() => {
        // 打开设置界面
        wx.openSetting({
          success: (res) => {
            // 判断是否授权成功
            if(res.authSetting['scope.userLocation']){
              // 获取定位信息
              _this.getAddress()
            }
          }
        })
      })
    }
  },

  //图文卡
  tapMsg(){
    this.signClick(2)
  },

  // 打卡登录 保存信息
 loginSign(){
    let openid = app.globalData.openid || wx.getStorageSync('openid');
    let userInfo = app.globalData.userInfo
    if(!openid){
      return
    }
    // 解析经纬度 计算出物理地址
    this.anQQmapaddress(this.data.latitude, this.data.longitude, (address)=>{
      Toast.loading({
        duration: 0, // 持续展示 toast
        message: '保存中...',
        forbidClick: true,
      });
      let nd = {
        openid: openid,
        address: address,
        longitude:this.data.longitude,
        latitude: this.data.latitude,
        nickname: userInfo.nickName,
        avatarurl:userInfo.avatarUrl,
        gender:userInfo.gender || 0,
        city:userInfo.city,
      }
      // 传递数据
      Ajax.post(Api.wx.loginSign,nd).then(()=>{
        // 关闭加载框
        wx.nextTick(() => {Toast.clear();})
        let i = this.data.signNumber ++ ;
        i++;
        this.setData({ 
          time:Util.formatTime(new Date),
          show: true,
          signNumber: i
        });
        app.globalData.signNumber = i
      })
    })
    
  },

  onClose() {
    this.setData({ show: false });
  },

  //判断用户定位权限
  isUserLocation: function(){
    let _this = this
    // 查询用户授权
    wx.getSetting({
      success(res) {
        if (!res.authSetting['scope.userLocation']) {
          // 获取授权
          wx.authorize({
            scope: 'scope.userLocation',
            success () {
              // 用户已经同意小程序使用定位功能
              // 获取定位信息
              _this.getAddress()
            },
            fail(e) {
              console.log(e)
              _this.setData({
                isLocation: false // 定位失败
              })
              Dialog.alert({
                message: '请授权小程序获取定位权限',
              }).then(() => {
                // 打开设置界面
                wx.openSetting({
                  success: (res) => {
                    // 判断是否授权成功
                    if(res.authSetting['scope.userLocation']){
                      // 获取定位信息
                      _this.getAddress()
                    }
                  }
                })
              });
            }
          })
        }else{
          // 获取定位信息
          _this.getAddress()
        }
      }
    })
  },

  // 获取定位
  getAddress(){	
    let _this = this
    wx.getLocation({
      type: 'gcj02',
      success: function (res) {
        let markers = [
            {
            id: 0,
            iconPath: "../../static/address.png",
            longitude: res.longitude,
            latitude: res.latitude,
            width: 30,
            height: 39
            }
          ]
        _this.setData({
          latitude: res.latitude,
          longitude: res.longitude,
          markers: markers,
          isLocation: true
        })
        //_this.anQQmapaddress(res.latitude, res.longitude)
      }
    });
  },

  // 经纬度解析
  anQQmapaddress(la,lo, callBack) {
    Toast.loading({
      duration: 0, // 持续展示 toast
      message: '加载中...',
      forbidClick: true,
    });
    var _this = this;
    // 引入SDK核心类
    var QQMapWX = require('../../utils/qqmap-wx-jssdk.min.js');
    // 实例化腾讯地图API核心类
    var qqmapsdk = new QQMapWX({
      key: 'FKXBZ-MVL3J-MY7FZ-F4IJQ-BD7W7-RSBDO' // 必填
    });
    //2、根据坐标获取当前位置名称，显示在顶部:腾讯地图逆地址解析
    qqmapsdk.reverseGeocoder({
      location: {
        latitude: la,
        longitude: lo
      },
      success: function (res) {
        wx.nextTick(() => {Toast.clear();})
        // 保存地址信息
        _this.setData({
          address: res.result.address
        })
        // 回调函数
        callBack(res.result.address)
        // 将位置信息存储在全局变量中
        app.globalData.addressInfo = {
          latitude: la,
          longitude: lo,
          address: res.result.address
        },
        console.log('返回地理位置：'+res.result.address);
      }
    })
  },
})
